// 用户模块
import { getUserInfo, login, getUserDetail } from '@/api/user'
import { getToken, setToken, removeToken, setTime } from '@/utils/auth'
import { resetRouter } from '@/router'

const state = {
  token: getToken(), // 存储用户token, 一进来先从cookie中取
  userInfo: {} // 用户信息
}

const mutations = {
  // 登录成功后存储token
  setToken(state, token) {
    // 存储到vuex中
    state.token = token
    // 存储到cookie中
    setToken(token)
    // 设置token初始时间
    setTime(Date.now())
  },
  // 删除token, vuex和cookie中都删除
  removeToken(state) {
    state.token = ''
    removeToken()
  },
  // 存储用户信息
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  // 移除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 更新头像
  updatePhoto(state, payload) {
    state.userInfo.staffPhoto = payload
  }
}

const actions = {
  // 登录
  async login({ commit }, payload) {
    const res = await login(payload)
    commit('setToken', res)
  },
  // 获取用户信息
  async getUserInfo({ commit }) {
    // 基本信息, 没有头像
    const res = await getUserInfo()
    const res2 = await getUserDetail(res.userId)
    // 详细信息
    commit('setUserInfo', { ...res, ...res2 })
  },
  // 登出
  logout({ commit }) {
    commit('removeToken') // 移除token
    commit('removeUserInfo') // 移除个人信息
    resetRouter() // 重置路由
    commit('permission/setRoutes', [], { root: true }) // 重置vuex中存储的路由信息
    commit('settings/removeTheme', null, { root: true }) // 重置主题颜色
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

